#include "lvgl_app/lvgl_app.h"
/*枚举
界面ID
    PM_ID_START_UP

界面参数
    无
*/
static lv_obj_t* axis_bar;

static lv_pm_open_options_t options_fade =
{
    .animation = LV_PM_ANIMA_FADE,
    .direction = LV_PM_ANIMA_BOTTOM,
    .target = LV_PM_TARGET_SELF
};

static void anim_axis_cb(void* var, int32_t v)
{
    lv_bar_set_start_value(var, 100 - v, LV_ANIM_ON);
}

static void anim_obj_01_cb(void* var, int32_t v)
{
    lv_obj_set_size(var, v, v);
    lv_obj_align_to(var, axis_bar, LV_ALIGN_TOP_MID, 0, 20);
}

static void anim_obj_02_cb(void* var, int32_t v)
{
    lv_obj_set_size(var, v, v);
    lv_obj_align_to(var, axis_bar, LV_ALIGN_CENTER, 0, 0);
}

static void anim_obj_03_cb(void* var, int32_t v)
{
    lv_obj_set_size(var, v, v);
    lv_obj_align_to(var, axis_bar, LV_ALIGN_BOTTOM_MID, 0, -20);
}
static void anim_label_01_cb(void* var, int32_t v)
{
    lv_obj_set_style_text_opa(var, LV_OPA_COVER*(60 - v)/60, LV_PART_MAIN);
    lv_obj_align_to(var, axis_bar, LV_ALIGN_OUT_RIGHT_TOP, 20 + v, 20);
}

static void anim_label_02_cb(void* var, int32_t v)
{
    lv_obj_set_style_text_opa(var, LV_OPA_COVER * (60 - v) / 60, LV_PART_MAIN);
    lv_obj_align_to(var, axis_bar, LV_ALIGN_OUT_RIGHT_MID, 20 + v, 0);
}

static void anim_label_03_cb(void* var, int32_t v)
{
    lv_obj_set_style_text_opa(var, LV_OPA_COVER * (60 - v) / 60, LV_PART_MAIN);
    lv_obj_align_to(var, axis_bar, LV_ALIGN_OUT_RIGHT_BOTTOM, 20 + v, -20);
}

static void anima_ready_cb(lv_anim_t* anim)
{
    lv_anim_timeline_del(anim->user_data);
    lv_pm_control.open(PM_ID_MENU, &options_fade);
}

static void page_onLoad(void* pm_page)
{
    lv_obj_t* page = lv_pm_get_pm_page(pm_page)->page;
  //printf("lifecycle: page1 onLoad\n");
  //lv_obj_set_style_bg_color(page, lv_color_make(237, 175, 5), LV_STATE_DEFAULT);
  //lv_obj_t *label = lv_label_create(page);
  //lv_label_set_text(label, "hello page0");
  //lv_obj_center(label);
}

static void page_unLoad(void* pm_page)
{
    lv_obj_t* page = lv_pm_get_pm_page(pm_page)->page;
  //printf("lifecycle: page0 unLoad\n");
}



/* 开机动画处理 */
static void didAppear(void* pm_page)
{
    lv_obj_t* page = lv_pm_get_pm_page(pm_page)->page;
    /* 下方开始设置各类对象及动画 */
    lv_anim_timeline_t* anim_timeline = lv_anim_timeline_create();
    /* 竖直的轴 */
    axis_bar = lv_bar_create(page);
    lv_obj_set_style_bg_opa(axis_bar, LV_OPA_TRANSP, LV_PART_MAIN);
    lv_bar_set_mode(axis_bar, LV_BAR_MODE_RANGE);
    lv_obj_set_size(axis_bar, 5, 170);
    lv_obj_align(axis_bar, LV_ALIGN_LEFT_MID, 60, 0);
    lv_bar_set_value(axis_bar, 100, LV_ANIM_OFF);
    lv_bar_set_start_value(axis_bar, 100, LV_ANIM_OFF);
 
    lv_anim_t anim_axis;
    lv_anim_init(&anim_axis);
    lv_anim_set_var(&anim_axis, axis_bar);
    lv_anim_set_values(&anim_axis, 0, 100);
    lv_anim_set_path_cb(&anim_axis, lv_anim_path_linear);
    lv_anim_set_time(&anim_axis, 4000);
    lv_anim_set_repeat_count(&anim_axis, 1);
    lv_anim_set_exec_cb(&anim_axis, anim_axis_cb);

    /* 轴上的点 1*/
    lv_obj_t* obj_01 = lv_led_create(page);
    lv_led_off(obj_01);
    lv_obj_set_style_bg_color(obj_01, lv_palette_main(LV_PALETTE_LIGHT_GREEN), LV_PART_MAIN);

    lv_anim_t anim_obj_01;
    lv_anim_init(&anim_obj_01);
    lv_anim_set_var(&anim_obj_01, obj_01);
    lv_anim_set_values(&anim_obj_01, 0, 20);
    lv_anim_set_path_cb(&anim_obj_01, lv_anim_path_ease_out);
    lv_anim_set_time(&anim_obj_01, 800);
    lv_anim_set_repeat_count(&anim_obj_01, 1);
    lv_anim_set_exec_cb(&anim_obj_01, anim_obj_01_cb);

    /* 轴上的点 2*/
    lv_obj_t* obj_02 = lv_led_create(page);
    lv_led_off(obj_02);
    lv_obj_set_style_bg_color(obj_02, lv_palette_main(LV_PALETTE_LIGHT_GREEN), LV_PART_MAIN);

    lv_anim_t anim_obj_02;
    lv_anim_init(&anim_obj_02);
    lv_anim_set_var(&anim_obj_02, obj_02);
    lv_anim_set_values(&anim_obj_02, 0, 20);
    lv_anim_set_path_cb(&anim_obj_02, lv_anim_path_ease_out);
    lv_anim_set_time(&anim_obj_02, 800);
    lv_anim_set_repeat_count(&anim_obj_02, 1);
    lv_anim_set_exec_cb(&anim_obj_02, anim_obj_02_cb);

    /* 轴上的点 3*/
    lv_obj_t* obj_03 = lv_led_create(page);
    lv_led_off(obj_03);
    lv_obj_set_style_bg_color(obj_03, lv_palette_main(LV_PALETTE_LIGHT_GREEN), LV_PART_MAIN);

    lv_anim_t anim_obj_03;
    lv_anim_init(&anim_obj_03);
    lv_anim_set_var(&anim_obj_03, obj_03);
    lv_anim_set_values(&anim_obj_03, 0, 20);
    lv_anim_set_path_cb(&anim_obj_03, lv_anim_path_ease_out);
    lv_anim_set_time(&anim_obj_03, 800);
    lv_anim_set_repeat_count(&anim_obj_03, 1);
    lv_anim_set_exec_cb(&anim_obj_03, anim_obj_03_cb);

    /* 轴上的点1 对应的lab*/
    lv_obj_t* label_01 = lv_label_create(page);
    //lv_obj_add_style(label_01, &font_style_siyuanheiti_28, LV_PART_MAIN);
    lv_label_set_text(label_01, "第九个下弦月");
    lv_obj_align_to(label_01, axis_bar, LV_ALIGN_OUT_RIGHT_MID, 0, 0);

    lv_anim_t anim_label_01;
    lv_anim_init(&anim_label_01);
    lv_anim_set_var(&anim_label_01, label_01);
    lv_anim_set_values(&anim_label_01, 60, 0);
    lv_anim_set_path_cb(&anim_label_01, lv_anim_path_ease_out);
    lv_anim_set_time(&anim_label_01, 1000);
    lv_anim_set_repeat_count(&anim_label_01, 1);
    lv_anim_set_exec_cb(&anim_label_01, anim_label_01_cb);

    /* 轴上的点2 对应的lab*/
    lv_obj_t* label_02 = lv_label_create(page);
    //lv_obj_add_style(label_02, &font_style_siyuanheiti_28, LV_PART_MAIN);
    lv_label_set_text(label_02, "66CCFF");
    lv_obj_align_to(label_02, axis_bar, LV_ALIGN_OUT_RIGHT_MID, 0, 0);

    lv_anim_t anim_label_02;
    lv_anim_init(&anim_label_02);
    lv_anim_set_var(&anim_label_02, label_02);
    lv_anim_set_values(&anim_label_02, 60, 0);
    lv_anim_set_path_cb(&anim_label_02, lv_anim_path_ease_out);
    lv_anim_set_time(&anim_label_02, 1000);
    lv_anim_set_repeat_count(&anim_label_02, 1);
    lv_anim_set_exec_cb(&anim_label_02, anim_label_02_cb);

    /* 轴上的点3 对应的lab*/
    lv_obj_t* label_03 = lv_label_create(page);
    //lv_obj_add_style(label_03, &font_style_siyuanheiti_28, LV_PART_MAIN);
    lv_label_set_text(label_03, "Jinsc");
    lv_obj_align_to(label_03, axis_bar, LV_ALIGN_OUT_RIGHT_MID, 0, 0);

    lv_anim_t anim_label_03;
    lv_anim_init(&anim_label_03);
    lv_anim_set_var(&anim_label_03, label_03);
    lv_anim_set_values(&anim_label_03, 60, 0);
    lv_anim_set_path_cb(&anim_label_03, lv_anim_path_ease_out);
    lv_anim_set_time(&anim_label_03, 1000);
    lv_anim_set_repeat_count(&anim_label_03, 1);
    lv_anim_set_exec_cb(&anim_label_03, anim_label_03_cb);

    /* 设定一个回调删除时间线以及开启新界面
       不删除或者绑定错误会有内存泄露   */
    anim_axis.user_data = anim_timeline;
    lv_anim_set_ready_cb(&anim_axis, anima_ready_cb);

    /* 下方开始设置时间线 */
    lv_anim_timeline_add(anim_timeline, 0, &anim_axis);
    lv_anim_timeline_add(anim_timeline, 4000 * 20 / 170, &anim_obj_01);
    lv_anim_timeline_add(anim_timeline, 4000 * 85 / 170, &anim_obj_02);
    lv_anim_timeline_add(anim_timeline, 4000 * 150 / 170, &anim_obj_03);
    lv_anim_timeline_add(anim_timeline, 4000 * 20 / 170, &anim_label_01);
    lv_anim_timeline_add(anim_timeline, 4000 * 85 / 170, &anim_label_02);
    lv_anim_timeline_add(anim_timeline, 4000 * 150 / 170, &anim_label_03);
    lv_anim_timeline_start(anim_timeline);
}

void page_create_page_start_up(lv_pm_id_t id)
{
    lv_pm_page_t*  page = lv_pm_create.create(id, page_onLoad, page_unLoad);

    lv_pm_create.status_bar(page, false);
    lv_pm_create.back_bar(page, false);
    lv_pm_create.didAppear(page, didAppear);


}

